QBASIC K÷■esi

Uzun sⁿredir dergimizde QBASIC programlar²na yer vermiyorduk. Ama fanatik QBASICÆτi okurlar²m²z²n ²srarlar²n² k²ramad²k ve bu ay dergimize bir QBASIC k÷■esi eklemeye karar verdik. Umar²z QBASIC kurtlar² haz²rlad²≡²m²z bu k÷■eden memnun kal²rlar. K÷■emizde neler yok ki. Bir mⁿzik kutusu, metin d÷nⁿ■tⁿrme program², grafik programlar²... Haydi bilgisayar²n ba■²na!

QBASIC ile basit bir mⁿzik kutusu (MUZIK.BAS)

▌lk program²n²z gⁿzel ve basit bir mⁿzik kutusu. Program²n²z ona parametre olarak verilen mⁿzik dosyalar²n² aτ²p iτeri≡ini τalabilir. Maalesef QBASIC 1.0Ʋn komut sat²r²ndan parametre almak gibi bir ÷zelli≡i olmad²≡²ndan QBASIC 1.0 kullananlar, program iτindeki COMMAND$ de≡i■kenini τalmak istedikleri dosya ismiyle de≡i■tirmelidirler. QBASIC 4.5 yada daha ⁿzeri sⁿrⁿmleri kullananlar ise programlar²n² derledikten sonra istedikleri mⁿzik dosyalar²n² programa parametre olarak verip τald²rabilirler. ▐unun gibi
C:\>MUZIK BACH.SNG
Ya da istedikleri dosyan²n ismini RUN menⁿsⁿnden Modify COMMAND$ seτene≡ine girerek belirleyebilirler.
Mⁿzik kutunuz sadece QBASICÆte PLAY komutuyla τald²rd²≡²n²z de≡i■kenleri tan²yabilir. Yani yarataca≡²n²z mⁿzik dosyalar² bu formatta olmal²d²r. Bu formatla olu■turulmu■ ve a■a≡²da listelenmi■ iki dosyay² bir metin edit÷rⁿyle yaz²p kaydedin ve mⁿzik kutunuzla τald²r²n... Oldukτa ho■unuza gidecektir.
CLS
ON ERROR GOTO hata    		'Programda herhangi bir hata ortaya τ²karsa "hata" adl² etikete git.
PRINT "╟almak istedi≡iniz mⁿzik dosyas²n² programa parametre olarak veriniz. J"
Dosya$ = COMMAND$   'Programa verilen parametre Dosya$ de≡i■kenine atan²yor.
OPEN Dosya$ FOR INPUT AS #1  	'Dosyay² sadece okumak iτin aτ
PRINT "╟al²n²yor...";
DO WHILE NOT EOF(1)          	'Dosya sonuna kadar oku.
LINE INPUT #1, sng$         	'Dosyadan tam bir sat²r oku.
IF LEFT$(sng$, 1) = ";" THEN GOTO atla  'E≡er sat²r²n ilk karakteri ";" 'ise o sat²r² atla (Aτ²klamalar yazabilirsiniz!)
PLAY "MB"			'Sat²r²n arka planda τal²nmas²n² sa≡la.
PLAY sng$			'Sat²r² τal
atla:
LOOP
CLOSE #1
END
hata:
SOUND 80, 1: PRINT "Hata kodu:"; ERR 	'Hata kodunu ver.
IF ERR = 52 THEN PRINT "Dosya ad² verilmemi■."
IF ERR = 53 THEN PRINT "Verilen dosya bulunamad²."
RESUME hata2
hata2:
END
▌■te ÷rnek ■ark²lar²n²z. Bu ■ark²lar² bir metin edit÷rⁿyle yaz²p sonra istedi≡iniz herhangi bir isimle kaydedin.
;Minuet in G Major
;Johann Sebastian Bach
;
T120O4L4MLDL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4F#L8GABGL4BL2A
T120O4L4DL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4AL8BAGF#L1G
T120O4L4MLDL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4F#L8GABGL4BL2A
T120O4L4DL8O3GABO4CL4DMSO3GGMLO4EL8CDEF#L4GMSO3GG
O4CL8DCO3BAL4BO4L8CO3BAGL4AL8BAGF#L1G
O4L4BL8GABGL4AL8DEF#DL4GL8EF#GDL4C#L8O3BO4C#L4O3A
L8ABO4C#DEF#L4MSGF#EMLF#O3MSAO4C#MLL1D
L4DO3L8GF#L4GO4EL8O3GF#L4GO4MSDCO3BMLL8AGF#GL4A
L8DEF#GABMSL4O4CO3BAMLL8BO4DO3MSL4GF#MLL1G
O4L4BL8GABGL4AL8DEF#DL4GL8EF#GDL4C#L8O3BO4C#L4O3A
L8ABO4C#DEF#L4MSGF#EMLF#O3MSAO4C#MLL1D
L4DO3L8GF#L4GO4EL8O3GF#L4GO4MSDCO3BMLL8AGF#GL4A
L8DEF#GABMSL4O4CO3BAMLL8BO4DO3MSL4GF#MLL1G


;Ramblin' Wreck
;
T200O3
E4D8C4C8C4D8E4E8E8D8C8D8E8D8C4O2B8O3MLC2C8MN
D8e4e8e4f8g4g8g4g8g4D8d4e8MLd2d8MN
G8A4F8A4F8A8O4MLC4C8MNO3B8A8G4E8G4E8G2
E4D8C4C8C4D8E4E8E8D8C8D8E8D8C4O2B8O3MLC2C8MN
T250O3mf

Renkli Yelpaze

▌kinci program²m²z ise ekrana gⁿzel ve 15 renkli bir yelpaze τizer. Program²n kaynak kodlar²n² de≡i■tirerek τok de≡i■ik g÷rⁿntⁿkler elde edebilirsiniz. DRAW komutunun parametrelerini ise QBASICÆin yard²m komutunu kullanarak ÷≡renebilirsiniz.
SCREEN 9: COLOR 8, 0: CLS
PRINT "15 Renkli gⁿzel bir yelpaze"
FOR I = 0 TO 35
CLR = I MOD 15 + 1
VC$ = VARPTR$(CLR)
FOR J = 0 TO 9
ACI = 10 * I + J
VA$ = VARPTR$(ACI)
DRAW "C=" + VC$ + "TA=" + VA$ + "NR159 "
NEXT: NEXT

Toplar...

A■a≡²daki program 256 gri ton kullanarak ekrana baloncuklar τizer. Kodlar τok k²sa olmas²na ra≡men ekrana oldukτa gⁿzel ■ekiller τiziyor.
SCREEN 13
DO
x = RND * 320: y = RND * 240: C = 31
R = RND * 25 + 10: CS = C / R / 2.3
FOR I = 1 TO R: CIRCLE (x, y), I, C
FOR a = 1 TO 10: NEXT a
CIRCLE (x, y - 1), I, C
C = C - CS
NEXT
LOOP UNTIL INKEY$ <> ""

Zig zagÆlar

Bu program ekranda rastgele noktalar belirleyip en son bulundu≡u noktadan seτilen son noktaya bir τizgi τekiyor, b÷ylece zig zagÆlar τiziyormu■ gibi bir izlenim veriyor.
SCREEN 12
DO
xat = INT(RND * 640): yat = INT(RND * 480)  æ Rastgele bir nokta belirle
xat = x2at: yat = y2at			
FOR a = 1 TO 1000: NEXT a		æBiraz bekle
COLOR INT(RND * 15)			æBir renk seτ
x2at = INT(RND * 640): y2at = INT(RND * 480)
LINE (xat, yat)-(x2at, y2at)		æ╟izgiyi τiz
LOOP UNTIL INKEY$ <  >   ""		æ Bir tu■a bas²lana kadar devam et

Windows WriteÆdan salt metine...

Size son olarak kullan²■l² bir metin τeviricisi veriyoruz... Program²n yapt²≡² Windows ortam²nda yaz²lan metinlerin DOS ortam²na aktar²lmas². Bildi≡iniz gibi Tⁿrkτe karakterler WindowsÆta ayr² DOSÆta ayr² karakter kodlar² ta■²yorlar. Bu yⁿzden DOS programlar² ile τal²■²rken Windows alt²nda yaz²lm²■ olan metinleri aτt²≡²n²zda ekranda abuk karakterler g÷rⁿyorsunuz. Program²n²z her ne kadar WindowsÆtan DOSÆa transfer yapmak iτin yap²ld²ysa da CASE sat²rlar²ndaki de≡erleri de≡i■tirerek bunun tam tersini sa≡layabilirsiniz. CASE sat²rlar² ayr²ca salt metin haline d÷nⁿ■tⁿrⁿlen metin iτindeki ôgaripö karakterleri de temizlememize yar²yor. Program²n²z iτeri≡inde resim dosyalar² ve bunun gibi OLE eklentileri bar²nd²ran Write dosyalar²n² ba■ar²l² olarak τeviremeyebilir. Bu yⁿzden Write dosyalar²n² τevirmeden bu gibi eklentileri Write dosyas²ndan τ²kartmal²s²n²z.

' MS-Windows Write dosyalar²n² MS-DOS Text format²na τevirir.
CLS : INPUT "MS-DOS Textine τevrilecek Write dosyas²: ", wr$
INPUT "Olu■turulacak yeni dosyan²n ismi: ", tx$
OPEN wr$ FOR INPUT AS #1	æWindows dosyas²n² okumak iτin,
OPEN tx$ FOR OUTPUT AS #2	æMetin dosyas²n² yazmak iτin aτ
DO WHILE NOT EOF(1)		æDosyan²n sonuna kadar devam et
s$ = INPUT$(1, #1)		æDosyadan bir karakter oku
IF s$ >  CHR$(0) AND s$ <  CHR$(10) THEN s$ = "": GOTO yapildi
SELECT CASE s$
CASE "▓": s$ = "²": GOTO yapildi		æKarakteri de≡i■tir ve ôyapildiöya dallan
CASE "│": s$ = "ⁿ": GOTO yapildi		
CASE "≈": s$ = "÷": GOTO yapildi
CASE CHR$(254): s$ = "■": GOTO yapildi
CASE CHR$(231): s$ = "τ": GOTO yapildi
CASE CHR$(221): s$ = "▌": GOTO yapildi
CASE CHR$(214): s$ = "╓": GOTO yapildi
CASE CHR$(240): s$ = "≡": GOTO yapildi
CASE CHR$(222): s$ = "▐": GOTO yapildi
CASE CHR$(220): s$ = "▄": GOTO yapildi
CASE CHR$(208): s$ = "╨": GOTO yapildi
CASE CHR$(199): s$ = "╟": GOTO yapildi
END SELECT
IF s$ >  CHR$(126) AND s$ <  CHR$(255) THEN s$ = ""
IF s$ >  CHR$(13) AND s$ <  CHR$(26) THEN s$ = ""
IF s$ >  CHR$(10) AND s$ <  CHR$(13) THEN s$ = ""
yapildi:
PRINT #2, s$;		æDosyaya bir karakter yaz
LOOP
CLOSE
PRINT "Dosyan²z olu■turuldu."
END